package APPyanghuanyu.reflect;

import APPyanghuanyu.Person.Person;
import APPyanghuanyu.Person.Student;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

public class ReflectTest {
    public static void main(String[] args) throws Exception {
        //可以创建任意类的对象， 可以执行任意方法
        /*
            前提：不能改变该类的任何代码，可以创建任意类的对象，可以执行任意方法
         */
        /*Person p = new Person();
        p.eat();*/

        /*Student stu = new Student();
        stu.sleep();*/


        //1.加载配置文件
        //1.1创建Properties对象
        Properties pro = new Properties();
        //1.2加载配置文件，转换为一个集合
        // 1.2.1获取class目录下的配置文件
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        InputStream is = classLoader.getResourceAsStream("pro.properties");
        pro.load(is);

        //2.获取配置文件中定义的数据
        String className = pro.getProperty("className");
        String methodname = pro.getProperty("methodname");

        //3.加载该类进内存
        Class<?> cls = Class.forName(className);
        //4.创建对象
        Object obj = cls.newInstance();
        //5.获取方法对象
        Method method = cls.getMethod(methodname);
        //6.执行方法
        method.invoke(obj);

        /*总结： 1.加载配置文件
                1.1创建properties对象
                1.2加载配置文件，转化为一个集合
                1.2.1获取class目录下的配置文件
                2.获取配置文件中定义的数据
                3.加载该类进内存
                4.创建对象
                5.获取方法对象
                6.执行方法
*/
    }
}
